package so.sao.shop.supplier.dao;

import org.apache.ibatis.annotations.Param;
import so.sao.shop.supplier.domain.CheckingAccountAlipay;
import so.sao.shop.supplier.domain.CheckingAccountPayment;
import so.sao.shop.supplier.pojo.vo.CheckingAccountAlipayVo;

import java.util.List;

/**
 * <p>Version: supplier V1.2.0 </p>
 * <p>Title: CheckingAccountAlipayDao</p>
 * <p>Description: 导入的阿里支付数据</p>
 *
 * @author: fangzhou
 * @Date: Created in 2017/11/22 10:47
 */
public interface CheckingAccountAlipayDao {

    /**
     * 根据payId（商户订单号）查询记录
     * @param payId
     * @return
     */
    List<CheckingAccountAlipay> findByPayId(@Param("payId") String payId);

    /**
     * 将阿里账单excel中的数据写入数据库
     * @param list
     * @throws Exception
     */
    void saveAccountAlipay(List<CheckingAccountAlipay> list);

    /**
     * 根据记录表ID查询此次插入数据的最大和最小完成时间
     * @param recordId
     * @return
     */
    CheckingAccountAlipayVo findEndTimeByRecordId(@Param("recordId")Long recordId);

    /**
     * 根据记录ID查询未银货两讫的正确数据
     * @param recordId
     * @return
     */
    List<CheckingAccountAlipay> findUnclearedByRecordId(@Param("recordId")Long recordId);


    /**
     * 根据商户订单号，支付流水号，记录Id统计支付/退款信息条数及金额
     * @param payId
     * @param paymentNum
     * @param recordId
     * @param businessType
     * @return
     */
    CheckingAccountAlipayVo count(@Param("payId")String payId, @Param("paymentNum")String paymentNum, @Param("recordId")Long recordId, @Param("businessType")String businessType);

    /**
     * 根据支付流水号，商户订单号和记录id查询阿里的退款信息
     * @param pay
     * @return
     */
    List<CheckingAccountAlipay> findRefund(CheckingAccountAlipay pay);

    /**
     * 根据支付流水号，商户订单号和记录id查询阿里的支付信息
     * @param pay
     * @return
     */
    List<CheckingAccountAlipay> findPaid(CheckingAccountAlipay pay);


    /**
     *将平台退款数据传入阿里进行对账
     * @param list
     * @return
     */
    List<CheckingAccountAlipay> checkRefund(List<CheckingAccountPayment> list);

    /**
     * 查出阿里有智购平台没有的数据
     * @param recordId
     * @return
     */
    List<CheckingAccountAlipay> findAliHave(@Param("recordId")Long recordId);

    /**
     * 查出两部分都有的数据
     * @param recordId
     * @return
     */
    List<CheckingAccountAlipay> findAllHavePaymentNum(@Param("recordId")Long recordId);

    /**
     * 查询两边都有阿里数据
     * @param recordId
     * @return
     */
    List<CheckingAccountAlipay> findAllHave(@Param("recordId")Long recordId);

    /**
     * 计算插入数据的收款类型
     * @param recordId
     */
    void updateReceiptType(@Param("recordId")Long recordId);

}
